package cn.fay.chapter15.coffee;

import java.util.Iterator;
import java.util.Random;

import cn.fay.chapter15.Generator;

public class CoffeeGenerator implements Generator<Coffee>, Iterable<Coffee> {

	private Class[] types={Latte.class,Mocha.class,Cappuccino.class,Americano.class,Breve.class};
	private static Random random=new Random();
	private int size=0;
	CoffeeGenerator(){}
	CoffeeGenerator(int size){
		this.size=size;
	}
	
	@Override
	public Iterator<Coffee> iterator() {
		return new CoffeeIterator();
	}

	@Override
	public Coffee next() {
		try {
			return (Coffee) types[random.nextInt(types.length)].newInstance();
		} catch (Exception e) {
			throw new RuntimeException(e.getMessage());
		}
	}
	
	class CoffeeIterator implements Iterator<Coffee>{
		int count=size;
		@Override
		public boolean hasNext() {
			return count>0;
		}
		@Override
		public Coffee next() {
			count--;
			return CoffeeGenerator.this.next();
		}
		@Override
		public void remove() {
			throw new UnsupportedOperationException();
		}
	}
	public static void main(String[] args) {
		CoffeeGenerator cg=new CoffeeGenerator();
		for (int i=0;i<5;i++){
			System.out.println(cg.next());
		}
		System.out.println("===========");
		for (Coffee coffee : new CoffeeGenerator(5)) {
			System.out.println(coffee);
		}
	}
}
